Description:
DCL detects classes that contain several independent groups of fields and methods. Such a class may be divided into several smaller classes each performing their own task. Smaller classes with well-defined sets of responsibilities are easier to understand and modify.
Incorrect:
DataContainer = class
strict private
apples,oranges:ArrayList;
public
procedure addApple(apple:IApple);
function getNumApples():Integer;
procedure addOrange(orange:IOrange);
function getNumOranges():Integer;
end;
...
procedure DataContainer.addApple(apple:IApple);
begin
apples.Add(apple);
end;
function DataContainer.getNumApples():Integer;
begin
result := apples.Count;
end;
procedure DataContainer.addOrange(orange:IOrange);
begin
oranges.Add(orange);
end;
function DataContainer.getNumOranges():Integer;
begin
result := oranges.Count;
end;
Correct:
AppleContainer = class
strict private
apples:ArrayList;
public
procedure addApple(apple:IApple);
function getNumApples():Integer;
end;
OrangeContainer = class
strict private
oranges:ArrayList;
public
procedure addOrange(orange:IOrange);
function getNumOranges():Integer;
end;
Refactoring: